iT邦幫忙

2021 iThome 鐵人賽

DAY 17
0
Software Development

From State Machine to XState系列 第 17

Day17 - XState 說為什麼可以選擇 XState?ft. 說文解字官網亮點

  • 分享至 

  • xImage
  •  

身為開發者,每次規劃、開發都面臨無數的判斷、種種的選擇,為什麼要學這個、為什麼要導入那個?
我們最害怕的冒然導入新東西進一個專案,然後 GG~

尤其是新東西一出來、潮潮跟風學一下、玩一下可以,但是要導入正式的專案要考量到的因素就很多
包含這種 Pattern, Practice 是不是經過時間的驗證?是不是主流?適用的情境是什麼?學習門檻高不高等等...

今天想藉由官網首頁的關鍵字,來提供更多資訊,協助大家決定是否導入這個套件,帶大家知道為什麼可以選擇 XState

透過跟大家分享 XState 官網上半部介紹的 3 大關鍵字
Finite State Machine, State Chart 以及 SCXML,一起稍微認識一下這個 library 能帶來什麼?
https://ithelp.ithome.com.tw/upload/images/20211002/20130721Ehvww2I9ka.png

Finite State Machine 就是指早前介紹到的 數學 計算模型 (Model of computation)

計算模型:描述了如何根據一組輸入值計算得出輸出值,也包含了負責運算、儲存和通訊等結構的具體組織方式。它可以用於測量一個演算法在時間和/或空間上的複雜度。通過計算模型的抽象化總結,我們可以分析出演算法的效能,而避免在具體程式層面,被不同的技術和實現方式造成的效能差異所誤導。 by wiki

也就代表 FSM 一詞,比較屬於概念面、抽象層次比較高,比較專注在數學、理論上,最後實際底層的實作也是依賴各家的作法。

Finite State Machine 理念及簡易實作的部分在前面已經有許多了,在此就不多加著墨。

State Chart 這也是我開賽前相當無感得地方,每次只會想說 State Chart 不就是 State Diagram 、把狀態機畫成圖而已, 每次點那個 link 都給我跳出一篇 1984 年,全英文的 paper,真心傻眼。

後來在各式中英文網站以及最後在 https://statecharts.dev/ 閱讀出的資料才知道,原來...State Chart 是一位有名的數學家 David HAREL 提出在現實世界的複雜系統可以怎麼用一個不錯的視覺表達的形式(A VISUAL FORMALISM FOR COMPLEX SYSTEMS),簡單來說,就是 FSM 的加強版、現實生活版。

(感謝鐵人賽讓我長大QQ)

SCXML 則更無感,全名是"State Chart extensible Markup Language",是在我寫到將近尾聲的快第18天,才大概知道是什麼碗糕(僅片面一點點)。之前看到這種縮寫就先忽略了XDDD

簡而言之,就是鼎鼎大名的 W3C 組織基於 Harel 的 State Chart 以及 CCXML (全名Call Control XML,asynchronous event-based blah blah blah),這兩個東西,以及現實世界中各種可能的 edge case 去制訂出來的規格書及 Markup Language。

這東西大概也早在 (2005 to 2015) W3C 組織 推出 W3C Recommendation 1 September 2015

This document describes SCXML, or the "State Chart extensible Markup Language". SCXML provides a generic state-machine based execution environment based on CCXML and Harel State Tables.

相信官網提出的這三大特色是想要說服使用者(痾~我指開發者),不要看我們 XState 很新而不放心,他其實就是過去非常經典、實用的 State Chart 製作成一個 library 提供 JavaScript 的開發者使用。

從 1984 David HAREL 發展出概念 -> 2005 - 2015 W3C 專家們一系列討論、思考、辯論想遍許多 Edge Case。

而 Finite State Machine 的概念,甚至比這更早就普遍實作在硬體開發上。


所以 XState ...

所以 XState ,就是 Finite State Machine, State Chart 軟體層面的底層實作,並且遵循著 W3C 推出的 SCXML 原則。

相信官網提出的這三大特色是想要說服使用者(痾~我指開發者),不要看我們 XState 很新而不放心,他其實就是過去非常經典、實用的 State Chart 製作成一個 library 提供 JavaScript 的開發者使用。

JavaScript 的開發者也不用擔心自己在風口上,用什麼潮潮 Pattern ,哪天退流行,摔死在路邊上,或者在旁邊哀號「求不要更新,老子學不動了」。

他就是一個很穩、很早就存在、規格也訂得很妥當的程式開發模式。

這叫什麼?換湯不換藥?啊~不是,我想這叫做經典不敗

隨著時代的演進、硬體的進步,以及軟體複雜度、這邊指 JavaScript, Web Application 的複雜度大幅提升,所以感覺很適合導入「狀態機」的概念,將複雜的狀態變簡單、限縮狀態及其轉移的路徑等。

如上述、過去幾篇的介紹,FSM 的概念除了在硬體開發上,在軟體開發也已存在許久,如遊戲軟體,試想一個遊戲同時有那麼多狀態要被記得。

一時找不到來源,FSM 的確適合複雜的狀態處理,據說飛機機師在操作的飛航系統,背後也是透過 Finite State Machine 的方式製作出來,試想要運送一群人在高速飛往空中,人命關天、不容閃失啊。所以開發過程要極力避免 Bug、沒思考到的例外、及意外發生

Aircraft flight sub-state machine for turns

https://www.researchgate.net/profile/Hassan-Sartaj/publication/337510742/figure/fig5/AS:852313044430849@1580218673555/Aircraft-flight-sub-state-machine-for-turns.ppm

參考文獻

https://xstate.js.org/docs/
https://www.w3.org/TR/scxml/


上一篇
Day16 - 快速回顧 Finite State Machine, State Chart + 淺嚐 XState
下一篇
Day18 - Interpreting Machines - 1 :什麼是 Interpret ?
系列文
From State Machine to XState31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
TD
iT邦新手 4 級 ‧ 2021-10-11 21:51:27

相信官網提出的這三大特色是想要說服使用者(痾~我指開發者),不要看我們 XState 很新而不放心,他其實就是過去非常經典、實用的 State Chart 製作成一個 library 提供 JavaScript 的開發者使用。

這段重複出現兩次,要忘記都難了 XD

Ken Chen iT邦新手 4 級 ‧ 2021-10-12 01:01:09 檢舉

哈哈哈,其實是段落編排調整漏刪了XD不過就讓他在那邊幫讀者們畫重點『強調』一下好了~~~^^

Ken Chen iT邦新手 4 級 ‧ 2021-10-12 01:01:29 檢舉

TD 的眼睛真的很利、覺得貼心,感動~~

我要留言

立即登入留言